import type {HttpRequest, TAxiosDescriptorConfig} from '../src'
import {Api, AxiosDescriptorConfig, Get, Http} from "../src";
import axios, {AxiosInstance} from "axios";

/**
 * 定义一个MyAxiosDescriptorConfig类，用于配置默认Axios实例。
 * 该类实现了AxiosDescriptorConfig接口。
 */
@AxiosDescriptorConfig()
export class MyAxiosDescriptorConfig implements TAxiosDescriptorConfig {
    // 可选的Axios实例，默认使用空配置创建一个Axios实例
    http?: AxiosInstance = axios.create({})
}

/**
 * 定义一个MyAxiosDescriptorConfig1类，用于配置带有基础URL的Axios实例。
 * 该类实现了AxiosDescriptorConfig接口。
 */
@AxiosDescriptorConfig('axios1')
export class MyAxiosDescriptorConfig1 implements TAxiosDescriptorConfig {
    // 可选的Axios实例，使用指定的基础URL创建一个Axios实例
    http?: AxiosInstance = axios.create({
        baseURL: 'https://underglaze-blue.github.io'
    })
}

/**
 * 使用Axios装饰器和Http装饰器定义一个TestAxios类。
 */
@Api('https://underglaze-blue.github.io')
export class TestAxios {
    // 通过Get装饰器定义一个动态URL的httpGet方法
    @Get('/lodash-analysis/assets/js/245.3f33319e.js')
    declare httpGet: HttpRequest
}

/**
 * 使用Axios装饰器和Http装饰器定义一个TestAxios1类。该类下的所有请求方法都使用指定的Axios实例[axios1]发送请求。
 */
@Api('', 'axios1')
export class TestAxios1 {
    // 通过Http装饰器定义一个静态URL的静态方法staticGet
    @Http({url: '/lodash-analysis/assets/js/245.3f33319e.js'})
    static staticGet: HttpRequest
}

export function apiTest() {
// 使用TestAxios类的静态方法staticGet发送请求
    TestAxios1.staticGet().then((resp: any) => {
        console.log('staticGet: ', resp.data)
    })

// 创建TestAxios实例，并使用实例方法httpGet发送请求
    const testAxios = new TestAxios()
// url地址包含展位参数: ext,请求参数添加相应的数据: {ext: 'js'}
    testAxios.httpGet({ext: 'js'}).then((resp: any) => {
        console.log('httpGet: ', resp.data)
    })

}
